/**
 * 课后作业 设计模式(如单例)的多个实现方式
 * 
 * dart中的单例
  工厂构造 Factory constructor
  静态变量 Static field with getter
  静态变量Static field
  常量和工厂构造 const constructor & factory
 */
//工厂构造 Factory constructor

class Singleton {
  Singleton._privateConstructor();

  static final Singleton _instance = Singleton._privateConstructor();

  factory Singleton() {
    return _instance;
  }
}

// 使用
void main() {
  var s1 = new Singleton();
  var s2 = new Singleton();
  print(identical(s1, s2)); // true
  print(s1 == s2); // true
}

// 静态变量 Static field with getter

class Singleton {
  Singleton._privateConstructor();

  static final Singleton _instance = Singleton._privateConstructor();

  static Singleton get instance {
    return _instance;
  }
}
//使用
// void main() {
// 	Singleton s = Singleton.instance;
// }

// 静态变量Static field
class Singleton {
  Singleton._privateConstructor();

  static final Singleton instance = Singleton._privateConstructor();
}
// 使用
// void main() {
// 	Singleton s = Singleton.instance;
// }

// 常量和工厂构造 const constructor & factory

class Singleton {
  factory Singleton() => const Singleton._internal_();
  const Singleton._internal_();
}
// 使用
// void main() {
//   print(new Singleton() == new Singleton());
//   print(identical(new Singleton() , new Singleton()));
// }
